The development and application of rule engines is one branch of Artificial Intelligence (A.I.), which is a very broad research area that focuses on “making computers think like people.” Broadly speaking, a rule engine is a set of one or more software modules running on a computing device (e.g., a server, a personal computer, etc.) that processes information by applying rules to data objects (such as facts). A rule is a logical construct for describing the operations, definitions, conditions, and/or constraints that apply to some predetermined data to achieve a goal. Various types of rule engines have been developed to evaluate and process rules. Conventionally, a rule engine creates a rulebase containing a network (e.g., Rete network) to process rules and data objects. The network may include many different types of nodes, including, for example, root nodes, object-type nodes, alpha nodes, left-input-adapter nodes, beta nodes (e.g., eval nodes, join nodes, not nodes, etc.), and terminal nodes, etc.
Typically, facts enter a network at a root node, from which they are propagated to any matching object-type nodes. From an object-type node, a data object is propagated to either an alpha node (if there is a literal constraint), a left-input-adapter node (if the data object is the left most object type for the rule), or a beta node (such as a join node).
Note that traditional applications using rule engines work by gathering all the facts regarding a given problem or scenario, inserting them into a working memory of the rule engine, executing the rules, obtaining the results, and starting the processing of the next work item. However, as more and more applications in today's business world demand the capability of event processing, where events represent state changes, typically have temporal relationship between them, and are generated in continuous streams, the conventional rule engines discussed above are inadequate to meet the demands of these applications. Furthermore, a common requirement of event processing is the ability to define and apply constraints that narrow the matching space to which regular constraints are applied. However, conventional rule engines typically lack the capability to define and apply such constraints prior to applying regular constraints.